#include <stdio.h>/*该文件包含pringtf()等函数*/
#include <stdlib.h>/*该文件包含exit()等函数*/
#include <malloc.h>/*该文件包含malloc()等函数*/

typedef int DataType;/*定义DataType为int*/


typedef struct Node
{
  DataType data;
  struct Node *next;
} LNode;
/*单链表初始化。初始化成功函数返回0，否则返回1。*/
int ListInitiate(LNode **head);

/* 函数返回由head所表示的单链表的长度。*/
int ListLength(LNode *head);

// 在由head所表示的单链表里插入一个元素 x 到位置 i。
// 插入成功函数返回0，否则返回1。
int ListInsert(LNode *head, int i, DataType x);


// 在由head所表示的单链表里删除位置 i 上的元素并将其值存入 x 变量里。调用成功后，列表长度减1。
int ListDelete(LNode *head, int i, DataType *x);

// 在由head所表示的单链表里获取位置 i 上的元素并将其值存入 x 变量里。调用成功后，列表长度不变。
int ListGet(LNode *head, int i, DataType *x);

// 释放所有的由head所表示的单链表里的元素节点（含头结点）。当释放完全成功时，函数返回0，否则返回1。
int Destroy(LNode **head); 

void main(void)
{
	LNode* head;
	int i, x;
	ListInitiate(&head);/*初始化*/
	for (i = 0; i < 10; i++)
	{
		if (ListInsert(head, i, i + 1) == 0)/*插入10个数据元素*/
		{
			printf("错误!\n");
			return;
		}
	}
	if (ListDelete(head, 4, &x) == 0)/*删除数据元素5*/
	{
		printf("错误!\n");
		return;
	}
	for (i = 0; i < ListLength(head); i++)
	{
		if (ListGet(head, i, &x) == 0)/*取元素*/
		{
			printf("错误!\n");
			return;
		}
		else printf("%d   ", x);/*显示数据元素*/
	}
	Destroy(&head);
}
